package cn.edu.hnu.gpg.service;

import cn.edu.hnu.gpg.dto.UniversalUser;
import cn.edu.hnu.gpg.entity.User;
import cn.edu.hnu.gpg.entity.enums.UserType;

public interface UserService {

    User findUserByUsername(String username);

    UniversalUser getUniversalUserByUserId(Integer userId);

    /**
     * 创建用户
     * @param username 创建用户的用户名
     * @param rawPassword 创建用户的明文密码
     * @param type 创建用户的用户类型，指定为 null 时使用默认值 {@code User.UserType.STUDENT}
     * @return 新建用户的 ID，创建失败时为 0
     */
    int createUser(String username, String rawPassword, UserType type);

    /**
     * 用户验证密码
     * @param username 验证密码的用户名
     * @param rawPassword 验证用户的用户明文密码
     * @return {@code true} 为密码正确，{@code false} 为密码错误
     */
    boolean validatePassword(String username, String rawPassword);

    /**
     * 用户修改密码
     * @param username 修改密码的用户名
     * @param oldPassword 用户旧密码
     * @param newPassword 用户的新密码
     * @return {@code true} 为修改成功，{@code false} 为修改失败
     */
    boolean modifyPassword(String username, String oldPassword, String newPassword);

    /**
     * 用户修改密码
     * @param username 修改密码的用户名
     * @return {@code true} 为修改成功，{@code false} 为修改失败
     */
    boolean modifyPassword(String username);

    boolean inactivateUser(String username);
}
